from PIL import Image, ImageDraw, ImageFont
from paddleocr import PaddleOCR, draw_ocr
import numpy as np
import jieba
import cv2
import os

class SSZ: ##不用再动了
	def take_picture(self):
		cap = cv2.VideoCapture(1)
		ret, frame = cap.read()
		# 镜像处理
		csvFilenames = cv2.flip(frame, 0)
		csvFilenames = cv2.flip(csvFilenames, 1)
		cv2.imwrite("imgs/cc.jpg",csvFilenames)
		# 打开一张图片
		img = Image.open("imgs/cc.jpg")
		# 图片尺寸
		img_size = img.size
		
		h = img_size[1]  # 图片高度
		w = img_size[0]  # 图片宽度
		
		# 切割图像
		region = img.crop((w/5, 0, 4*w / 5, h))    # crop函数里面四个数据分别为左、上、右、下，按照这个规则来分割你想的比例图片。
		region.save("result_images/test.jpg")
	
		
	def ocr_first(self,img_path):  # 识别所有文字和数字
		ocr = PaddleOCR(use_angle_cls=True, lang="ch")
		f = open("ocr_first.txt", 'w')
		global result
		result = ocr.ocr(img_path, cls=True)
		for line in result:
			f_sc = line[1][0]
			f.write(f_sc)
		f.close()
	
	
	def fenci(self,text):  # 重新切割语义
		STOPWORDS_CH = open(fname_stop, encoding='utf8').read().split()
		word_list = [
			w for w in jieba.cut(text)
			if w not in set(STOPWORDS_CH) and len(w) > 1
		]
		return word_list
	
	def make_thin(self,lins,x,y,count_ss):
		f = open("result.txt", 'a+')
		province = ['北京市', '天津市', '辽宁省', '甘肃省', '福建省', '山东省', '湖北省', '四川省',
		            '江苏省', '河北省', '云南省', '山西省', '广东省', '台湾省', '广西壮族自治区',
		            '宁夏回族自治区', '香港特别行政区', '上海市', '重庆市', '吉林省', '青海省',
		            '浙江省', '安徽省', '湖南省', '陕西省', '江西省', '河南省', '贵州省', '海南省',
		            '黑龙江省', '西藏自治区', '内蒙古自治区', '新疆维吾尔自治区', '澳门特别行政区']
		#province_special = ['新疆', '澳门', '内蒙古', '西藏', '宁夏', '广西']
		length = len(lins)
		middle = str((x,y))     #文本框中心坐标
		global scresult ## 重点
		#获取省份并保存相应格式
		for i in range(length):
			if lins[i] in province:
				f_ss = lins[i]
				scresult=f_ss + ','+middle
				f.write(scresult + '\n')
				break
		lines = len(open("result.txt", 'rU').readlines())
		if lines != count_ss: #若没有检测文件行数更新则说明省份文字未识别出来，应标注为'无'
			scresult = '无' + ',' + middle
			f.write(scresult + '\n')
		f.close()
		return scresult
	
	def average_xy(self,boxes):
		x = 0
		y = 0
		for i in range(4):
			x = x + boxes[-1][i][0]
			y = y + boxes[-1][i][1]
		x = x / 4
		y = y / 4
		return x,y
	
def main():
	ssz = SSZ()
	ssz.take_picture()
	read_path_1 = 'result_images/test.jpg'  # 从这个位置抽取照片
	global count_ss
	count_ss = 0
	ssz.ocr_first(read_path_1)
	# 切割语义配置文件
	fname_text = 'ocr_first.txt'
	
	text = open(fname_text, encoding='utf8').read()
	sc = ssz.fenci(text)  # 切割语义
	boxes = [line[0] for line in result]
	x, y = ssz.average_xy(boxes)  # 获得中心坐标，进行适时调整
	#string = ssz.make_thin(sc, x, y, count_ss)## 这个是为了输出到result.txt的语句，不想要的话直接注释掉即可
	
	return x, y



fname_stop = 'hit_stopwords.txt'
x, y = main()  # 获得中心坐标，进行适时调整
print(x)
print(y)
	
